// 在ES6之前,遍历的写法各异,下面列出几种遍历的写法,并且分析出其缺点所在

var arr = ['a', 'b', 'c'];



//使用for循环遍历数组,缺点很明显了,只能用于连续的数组,不能用于稀疏数组,与“值”无关，拿到的是索引，还得再取下标。
for (var i = 0; i < arr.length; i++) { 
  console.log(i, arr[i]);
}


const obj = {
    a:1,
    b:2,
    c:3
}


//forin的缺点: 1.遍历顺序不固定 2.会沿着原型链进行遍历 3.数组上用起来更是灾难,把lenght,自定义可枚举方法都遍历出来
for (const key in obj) { //forin属于对象专用遍历方式,如果用在数组的话没有意义,输出的key是数组的索引
    console.log(key)
}


//while循环,缺点:1.代码冗余,2.指针暴露 3.无法暂停恢复,只能一次跑完
function whileLoop(arr){
    let i = 0 ;
    while (i<arr.length){
        console.log(arr[i++])
    }
}

whileLoop(arr)


//以上是迭代器未出来之前,遍历对象/数组的几种方式,各有各的缺点,所以ES6推出了迭代器,来解决这些问题








